package co.com.coomeva.adminEvaluacion.logica;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import co.com.coomeva.adminEvaluacion.modelo.entidades.Cargo;
import co.com.coomeva.adminEvaluacion.modelo.entidades.CargoId;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EvaRoleCargo;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EvaRoleCargoId;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.CargoDAO;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.EvaRoleCargoDAO;
import co.com.coomeva.adminEvaluacion.modelo.util.DatabaseUtil;

public class CargoLogica {

	private static CargoLogica cargoLogica = null;
	
	//Objeto con el que se accede a la BD
	private CargoDAO cargoDAO = null;
	
	/**
	 * Constructor de la clase
	 */
	public CargoLogica() {
		cargoDAO = new CargoDAO();
	}
	
	/**
	 * Metodo que permite obtener una instancia de la clase
	 * @return Instancia de la clase
	 */
	public static CargoLogica getInstance()	{
		if(cargoLogica == null) {
			cargoLogica = new CargoLogica();
		}
		return cargoLogica;
	}	
		
	/**
	 * Metodo que permite consultar los cargos
	 * @param cargoCodigo Codigo del cargo
	 * @param roleCodigo Codigo del rol
	 * @param roleNombre Nombre del rol
	 * @return Lista del tipo EvaRoleCargo con los cargos consultados
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<Cargo> consultarCargos(Long cargoCodigo, String cargoNombre, Long gerenciaCodigo, Long unidadNegocio) throws Exception {

		Session session = cargoDAO.getSession();
		List<Cargo> valorList = new ArrayList<Cargo>();
		
		try {			
			Query qSelect;
			
			if(gerenciaCodigo.longValue() == 1){
				qSelect = session.getNamedQuery("consulta_cargos_gerencia_1");
				Long valorMinimo;
				Long valorMaximo;
				if(unidadNegocio != null && unidadNegocio.longValue() == 8) {
					//Unidad corporativa
					valorMinimo = new Long(1000);
					valorMaximo = new Long(1199);
				} else if(unidadNegocio != null && unidadNegocio.longValue() == 7) {
					valorMinimo = new Long(1200);
					valorMaximo = new Long(1399);
				} else if (unidadNegocio != null && unidadNegocio.longValue() == 10) {
					valorMinimo = new Long(1400);
					valorMaximo = new Long(1599);
				} else {
				    valorMinimo = new Long(1900);
				   	valorMaximo = new Long(1999);
				}
					
				qSelect.setLong("valorMinimo", valorMinimo);
				qSelect.setLong("valorMaximo", valorMaximo);
				
			}
			else{
				qSelect = session.getNamedQuery("consulta_cargos_gerencia_no_1");
				qSelect.setLong("gerenciaCodigo", gerenciaCodigo);
			}
				
			//System.out.println("sentencia cargos>  "+ qSelect.toString());
			List list = qSelect.list();			
				
			Cargo objTemp;
			CargoId objCargoId;
			for (Iterator iter = list.iterator(); iter.hasNext();) {
				Object[] obj = (Object[]) iter.next();
		
				objTemp = new Cargo();
				objCargoId = new CargoId();
				objCargoId.setCargoCodigo(new Long(obj[0].toString()));
				objCargoId.setCargoNombre(obj[1].toString());
				
				objTemp.setId(objCargoId);
				valorList.add(objTemp);
			}
		
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error consultando los registros");
		} finally {
			session.clear();
			session.close();
		}
		return valorList;
	}
}
